package ncs.modelo.impl;

import java.util.ArrayList;
import java.util.List;
import ncs.modelo.dao.PropietarioDao;
import ncs.modelo.entidades.TPropiertario;
import ncs.modelo.util.HibernateUtil;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Projections;
import org.hibernate.transform.AliasToBeanResultTransformer;

/**
 *
 * @author rick
 */
public class PropietarioDaoImpl implements PropietarioDao {

    @Override
    public void insertar(TPropiertario propietario) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            session.beginTransaction();
            String nuevoID = getIDPropietario();
            propietario.setCdPropietario(nuevoID);
            propietario.setEstado(true);
            session.save(propietario);
            session.beginTransaction().commit();
        } catch (Exception e) {
            System.out.println("Error en insertar: " + e.getMessage());
            session.beginTransaction().rollback();
        }
    }

    private String getIDPropietario() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        String nuevoID = "";
        try {
            Query qry = session.createSQLQuery("SELECT idPropietario();");
            ArrayList<String> idNuevo = (ArrayList<String>) qry.list();
            nuevoID = idNuevo.size() > 0 ? idNuevo.get(0) : "";
        } catch (Exception e) {
            System.out.println("\nError en getIDPropietario: " + e.getMessage());
        }
        return nuevoID;
    }

    @Override
    public void actualizar(TPropiertario propietario) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            session.beginTransaction();
            session.merge(propietario);
            session.beginTransaction().commit();
        } catch (Exception e) {
            System.out.println("Error en insertar: " + e.getMessage());
            session.beginTransaction().rollback();
        }
    }

    @Override
    public void eliminar(TPropiertario propietario) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            session.beginTransaction();
            session.delete(propietario);
            session.beginTransaction().commit();
        } catch (Exception e) {
            System.out.println("Error en insertar: " + e.getMessage());
            session.beginTransaction().rollback();
        }
    }

    @Override
    public TPropiertario buscarPorId(String id) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        return (TPropiertario) session.load(TPropiertario.class, id);
    }

    @Override
    public List<TPropiertario> buscarTodos() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        return session.createCriteria(TPropiertario.class, "tp")
                .setProjection(Projections.projectionList()
                .add(Projections.property("tp.cdPropietario"),"cdPropietario")
                .add(Projections.property("tp.nombreCom"),"nombreCom")
                .add(Projections.property("tp.tipoDocI"),"tipoDocI")
                .add(Projections.property("tp.nroDocI"),"nroDocI")
                .add(Projections.property("tp.estado"),"estado")
                ).setResultTransformer(new AliasToBeanResultTransformer(TPropiertario.class)).setMaxResults(100000).list();
    }
}
